package version1;

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

/*版本1--封装
 * Mysql工具类
 * 1.数据库：地址、用户名、密码   私有属性--静态化【本类直接调用】
 * 2.静态方法【本类直接调用】getParam(String 路径)
 * 目的：使用方法调用外部文件  db_mysql.properties
 * db_mysql.properties  对应  Java Properties类：读取键值对形式信息
 * Properties 类 提供方法 load()  读取配置文件信息【键值对--数据库基本信息】
 * 3.通过封装概念--连接成功数据【通用一个类链接Mysql和Oracle】
 * */
public class Mysql {
    //1.任何数据库具备：地址、用户名、密码--私有静态属性
    private static String url;
    private static String username;
    private static String password;

    //2.静态方法：getParam(String 路径)---链接数据库--读取信息
    public static void getParam(String fileName) throws IOException {
        Properties p = new Properties();
        InputStream fis = Mysql.class.getClassLoader().getResourceAsStream(fileName);
        p.load(fis);
        url = p.getProperty("url");
        username = p.getProperty("username");
        password = p.getProperty("password");
        System.out.println("测试连接参数:" + url + " | " + username + " | " + password);
    }

    // 关闭资源的工具方法
    public static void close(Connection con, Statement st, ResultSet rs) {
        try {
            if (rs != null) rs.close();
            if (st != null) st.close();
            if (con != null) con.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        Connection con = null;
        Statement st = null;
        ResultSet rs = null;

        try {
            // 加载数据库配置
            Mysql.getParam("db_mysql.properties");

            // 1.创建数据库连接
            con = DriverManager.getConnection(url, username, password);
            System.out.println("数据库连接成功");

            // 2.执行SQL操作

            // 插入操作
            st = con.createStatement();
            String insertSql = "INSERT INTO book VALUES(6,'余华','活着',79,'2010年',80,'否')";
            int insertRows = st.executeUpdate(insertSql);
            System.out.println("插入操作成功，影响行数: " + insertRows);

            // 更新操作
            String updateSql = "UPDATE book SET price = 89 WHERE id = 6";
            int updateRows = st.executeUpdate(updateSql);
            System.out.println("更新操作成功，影响行数: " + updateRows);

            // 删除操作
            String deleteSql = "DELETE FROM book WHERE id = 6";
            int deleteRows = st.executeUpdate(deleteSql);
            System.out.println("删除操作成功，影响行数: " + deleteRows);

            // 查询操作
            String selectSql = "SELECT * FROM book";
            rs = st.executeQuery(selectSql);
            System.out.println("\n查询结果:");
            while (rs.next()) {
                System.out.print("ID: " + rs.getInt("id"));
                System.out.print(" | 作者: " + rs.getString("author"));
                System.out.print(" | 书名: " + rs.getString("title"));
                System.out.println(" | 价格: " + rs.getDouble("price"));
            }

        } catch (IOException | SQLException e) {
            e.printStackTrace();
        } finally {
            // 3.关闭资源
            close(con, st, rs);
        }
    }
}